package etp.server;

import java.util.ArrayList;
import java.util.List;

import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserServiceFactory;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

import etp.client.ErroRecurso;
import etp.client.Recurso;
import etp.client.rpc.ResourceAdminService;

public class ResourceAdminServiceImpl extends RemoteServiceServlet implements
		RemoteService, ResourceAdminService {

	public List<Recurso> list() {
		return new ArrayList<Recurso>(AdminRecurso.listarRecurso());
	}

	@Override
	public Recurso cadastrar(Recurso r) throws Exception{  
		
		ErroRecurso erro = AdminRecurso.criarRecurso(r);
		
		if(erro != ErroRecurso.SUCESSO){
			throw new Exception(erro.msg());
		}
		
		return r;
	}

	@Override
	public String modificar(String cod, Recurso r) {
		return AdminRecurso.modificarRecurso(cod, r).msg();
	}

	@Override
	public String remover(String cod) {
	
		ErroRecurso err = AdminRecurso.excluirRecurso(cod);
		
		if(err != ErroRecurso.SUCESSO){
			throw new RuntimeException(err.msg());
		}
		
		return cod;
	}

	@Override
	public Recurso getCurrentUser() throws Exception {

		Recurso r = null;
		
		try{
			User user = UserServiceFactory.getUserService().getCurrentUser();
			
			if(user == null){
				return null;
			}
			
			r = AdminRecurso.getRecurso(user.getEmail());
		}
		catch(Throwable t){
			throw new Exception(t.getMessage());
		}
		
		return r;
	}

	@Override
	public Recurso getRecurso(String email) throws Exception {
		return AdminRecurso.getRecurso(email);
	}

}
